import { resolve } from 'path';
import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';
import svgLoader from 'vite-svg-loader';
import prismjsPlugin from 'vite-plugin-prismjs';
import configArcoStyleImportPlugin from './plugin/arcoStyleImport';

// 加载 .env 文件中的环境变量
// 根据当前工作目录中的 `mode` 加载 .env 文件
// 设置第三个参数为 '' 来加载所有环境变量，而不管是否有 `VITE_` 前缀。
// const env = loadEnv(process.env.VITE_MODE, process.cwd());
const env = loadEnv('', process.cwd());

// 如果计划在子路径下部署站点，则需要设置 publicPath；如果计划将站点部署到 https://domain.test/bar/，publicPath 应设置为 “/bar/”
// publicPath 建议使用 “/”！！！用 “/bar/” 有些包路径有问题，如 tinymce
const publicPath = env.VITE_PUBLIC_PATH ? env.VITE_PUBLIC_PATH : '/';
const outputDir = env.VITE_OUTPUT_DIR ? env.VITE_OUTPUT_DIR : 'dist';
const serverPort = env.VITE_APP_PORT ? env.VITE_APP_PORT : 3002;

export default defineConfig({
  plugins: [
    vue(),
    vueJsx(),
    svgLoader({ svgoConfig: {} }),
    configArcoStyleImportPlugin(),
    prismjsPlugin({
      languages: ['html', 'css', 'markup', 'javascript', 'php', 'dart', 'bash', 'nginx', 'sql'], // 语言 all:所有语言
      plugins: ['line-numbers'], // 行号插件（可以不用，还有其他插件网上查询）
      theme: 'okaidia', // 主题 coy|twillight|tomorrow|solarizedlight|okaidia|funky|dark
      css: true,
    }),
  ],
  resolve: {
    alias: [
      {
        find: '@',
        replacement: resolve(__dirname, '../src'),
      },
      {
        find: 'assets',
        replacement: resolve(__dirname, '../src/assets'),
      },
      {
        find: 'vue-i18n',
        replacement: 'vue-i18n/dist/vue-i18n.cjs.js', // Resolve the i18n warning issue
      },
      {
        find: 'vue',
        replacement: 'vue/dist/vue.esm-bundler.js', // compile template
      },
    ],
    extensions: ['.ts', '.js'],
  },
  define: {
    'process.env': {},
  },
  css: {
    preprocessorOptions: {
      less: {
        modifyVars: {
          hack: `true; @import (reference) "${resolve(
            'src/assets/style/breakpoint.less'
          )}";`,
        },
        javascriptEnabled: true,
      },
    },
  },

  // 服务端渲染
  server: {
    open: env.VITE_OPEN, // 开发服务器启动时，自动在浏览器中打开应用程序
    // 是否开启 https
    // https: false,
    // 端口号
    port: Number(serverPort),
    host: '0.0.0.0',
    // 反向代理解决跨域
    // proxy: {
    //   [env.VITE_API_BASE_URL]: {
    //     // 本地接口API地址
    //     changeOrigin: true,
    //     rewrite: (path) => path.replace(new RegExp('^' + env.VITE_API_BASE_URL), ''),
    //   },
    // },
  },
  build: {
    outDir: outputDir, // 当运行 vue-cli-service build 时生成的生产环境构建文件的目录
    assetsDir: 'assets', // 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录
  },
  root: process.cwd(),
  base: publicPath, // 开发或生产环境服务的公共基础路径
  publicDir: 'public', // 用于存放静态资源服务的文件夹，该目录在文件开发期间在根目录处，在构建后，将会复制到outDir的根目录
});
